Perl语言学习(二)Perl数据类型

1、Perl数据类型之标量

  • 标量:Scalar,以$符号开头
    • 数字标量:
      • 值为”数字“的标量
      • Perl中的数字
        • 全部为双精度浮点数:$data = 10; $data = 10.00;
        • 普通放入表示方法:3.1415926,-500等
        • 科学计数法:2.18e22,2.18E22,5.16e-10
        • 特殊数字的表示方法:较长的、不带小数点的数字,可用下划线分开;非十进制数
  • 字符串标量:
    • 标量值为字符串,由引号标识
    • 字符串由可输出的字母、数字和标点符号组成,如$data = “Hellow, World"
    • 字符串的引号既可以是单引号,也可以是双引号,可灵活使用
    • 单引号与双引号表示的区别:转义符只在双引号中有效
  • 标量的声明
    • 标量可以在任意位置随时声明并使用,标量的默认初始值为空
    • 标量名可以是字符、数字或者下划线,区分大小写,取名应和用途相关
  • 标量的作用域
    • 标量的作用域指的是一个标量可以被有效访问使用的范围
    • 两种标量的作用域范围:
      • 包变量(全局的)
        • Perl中一个package是一个包,主函数也可以看做一个包
        • 默认情况下的变量为包变量,是包内的全局变量,在整个包及下面的子函数中都可用
      • 私有标量
        • 分为my类型和local类型
        • my变量:只在本层模块中可以看到这个变量
        • local变量:在本层及本层下层的函数中都可以看到的变量
      • sub g_print{
            print "$x\n";
        }
        sub test_my{
            my $x = 11;
            print "call-my $x\n";
            g_print;
        }
        sub test_local{
            local $x = 20;
            print "call-local $x\n";
            g_print;
        }
        
        $x = 9;
        test_my;
        test_local;
        print $x;
        
        # 运行结果
        call-my 11
        9
        call-local 20
        20
        9
        

2、Perl数据类型之数组

  • 数组的定义

    • 数组是标量数据的有序列表,是多个标量数据的一个集合。可以包含任意多个元素,从0到全部占满内存

    • 数组以@符号作为标识


      image.png
    • 列表直接量:

      • 包含了一系列值的列表,以括号标识,中间用逗号隔开


        image.png
      • 也可以用范围操作符".."来产生列表直接量:

        • 该操作符会从左边的数字计数到右边,每次加1,产生一连串的数字


          image.png
  • 数组的赋值

    • 对于纯字符串的列表,使用“qw”来表示,可省略对字符串加引号的过程
    • 形式为:
      • qw(string1 string2 string3); ##空格、制表符、换行符作为分隔符
      • 等同于("string1","string2","string3");
      • 也可用其他任何标点符号作为定界符,代替括号
      • qw !string1 string2 string3! qw /string1 string2 string3/ qw #string1 string2 string3#
    • 对数组进行赋值,可以直接将列表量传递给数组
      • @array = ("string1", 1.5, 418); @array = qw(string1 string2 string3);
      • 如果列表直接量中包含标量、数组,则会进行取值作为元素
      • $test = "hello"; @array = ("hello", 123); @array2 = ($test, @arrray1, "How are you")
    • 数组之间进行赋值:
      • @array1 = ('string1', 1.5, 418); @array2 = @array1;
    • 特殊的数组赋值方法:
      • pop操作符:取出数组中最后一个元素,同时返回该元素值
        • @array = (5..9); ##@array为(5,6,7,8,9)
        • $test1 = pop(@array); ##$test1为9,@array为(5,6,7,8)
        • $test2 = pop(@array); ##$test2为8,@array为(5,6,7)
      • push操作符:添加一个元素(或一串元素)到数组的尾端
        • @array = (5,6);
        • push(@array,8); ##@array为(5,6,8)
        • push(@array,1..5); ##@array为(5,6,8,1,2,3,4,5)
      • shift操作符:取出数组最左边的元素,同时返回该元素值
        • @array = (5..9); ##@array为(5,6,7,8,9)
        • $test1 = shift(@array); ##$test1为5,@array为(6,7,8,9)
        • $test2 = shift(@array); ##$test2为6,@array为(7,8,9)
      • unshift操作符:添加一个元素(或一串元素)到数组的前端
        • @array= (5,6)
        • unshift(@array,8) ##@array为(8,5,6)
        • unshift(@array,1..5) ##@array为(1,2,3,4,5,8,5,6)
  • 数组元素的访问

    • 通过索引对数组元素进行访问:
      • @array = ("hello","world",123)
      • $array[0]="hello"; $array[1]="world"; $array[2] = 123;
      • 同标量$array没有任何关系
    • 特殊索引值:
      • 用$#<数组名>代表最后一个元素的索引值。$end=$#array
      • 使用负数索引。
        • $array[-1]代表最后一个元素值
        • $array[-2]代表倒数第二个元素值

3、Perl数据类型之引用

  • 引用作为一种数据变量,可以指向变量、数组甚至子程序,代表值的地址

  • 在Perl中,可以把引用称为指针,二者是通用、无差别的

  • 变量、变量名、地址


    image.png
  • 软引用:

    • 软引用类似于软连接,存储一个变量的名字
      • $scalar = "hello";
      • @scalar = ("hello","world",123);
      • $refer = "scalar"; ##引用变量名
    • 软引用的解引用
      • $$refer ##实质为$scalar,即为“Hello“
      • $$refer[0] ##实质为$scalar[0]
  • 硬引用:

    • 硬引用类似于硬连接,就是存储地址
      • $scalarref = \$foo; ##标量引用,$foo = "hello";
      • $constref = \186_282.42; ##常量引用
      • $arrayref = \@arr; ##数组引用,@arr= 1..100;
      • $arrRef = [1,2,3,4,5]; ##匿名数组的引用
    • 硬引用的解引用
      • 由于硬引用是地址,所以用{}来进行解引用
      • $scalarref = \$foo; ==> ${$scalarref}, 简写为$$scalarref
      • $constref = \186_282.42; ==> ${$constref}, 简写为$$constref
      • $arrayref = \@arr; ==> ${$arrayref}
      • $arrRef = [1,2,3,4,5]; ==> ${$arrRef}
  • 引用有助于创建复杂的数据

    • @array = ([1..5],"hello world")
    • ${$array[0]}{0} ##值为1
my $scalar = "Hello";
my @array = ("Hello","World",123);
my $scal_ref = \$scalar;
my $arr_ref = \@array;
## compare
my $scalar_com = $scalar;
my $array_0 = $array[0];

printf("scalar value:$$scal_ref\n");
printf("array0 value:$($arr_ref)[0]\n");

## modify the value
$$scal_ref = "Hello2";
$($arr_ref)[0] = "Hello2";

$scalar_com = "Hello3";
$array_0 = "Hellow3";

printf("scalar value: $scalar\n");
printf("array0 value: $array[0]\n");

# 输出结果
scalar value:Hello
array0 value:Hello
scalar value: Hello2
array0 value: Hello2

参考来源:https://www.jikexueyuan.com/course/901.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270